package cn.xenosp.server.module.third_server.dao;

import cn.xenosp.server.common.Constant;
import cn.xenosp.server.common.cache.Cache;
import cn.xenosp.server.module.third_server.entity.NginxEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 项目名： nginx-web
 * 包路径： cn.xenosp.nginx.web.dao
 * 作者：   TongHui
 * 创建时间: 2024-07-27 09:04
 * 描述: TODO
 * 版本: 1.0
 */
@Repository
public class NginxDao {
    @Autowired
    Cache redisCache;

    public Integer getTotal(){
        return Integer.valueOf(String.valueOf(redisCache.lGetListSize(Constant.NGINX_LIST)));
    }

    public Map<String,Object> list(Integer page, Integer limit){
        page--;

        Integer total = Integer.valueOf(String.valueOf(redisCache.lGetListSize(Constant.NGINX_LIST)));
        int totalPage = (int) Math.ceil(total / limit);

        limit--;
        int start = (page > totalPage ? totalPage:page*limit);
        List<Object> list = redisCache.lGet(Constant.NGINX_LIST, start, start+limit);
        if (list == null){
            list = new ArrayList<>();
        }
        Map pageMap = new HashMap();
        pageMap.put("total",total);
        pageMap.put("rows",list);

        return pageMap;
    }

    public void add(NginxEntity nginxEntity){
        redisCache.lSet(Constant.NGINX_LIST,nginxEntity);
    }

    public NginxEntity get(String id){
        List<Object> list = redisCache.lGet(Constant.NGINX_LIST, 0, -1);
        for (int i =0;i<list.size();i++) {
            NginxEntity nginxEntity = (NginxEntity) list.get(i);
            if (id.equals(nginxEntity.getId())){
                return nginxEntity;
            }
        }
        return null;
    }

    public NginxEntity edit(NginxEntity nginxEntity){
        List<Object> list = redisCache.lGet(Constant.NGINX_LIST, 0, -1);
        for (int i =0;i<list.size();i++) {
            NginxEntity entity = (NginxEntity) list.get(i);
            if (nginxEntity.getId().equals(entity.getId())){
                redisCache.lUpdateIndex(Constant.NGINX_LIST,i,nginxEntity);
            }
        }
        return null;
    }

    public NginxEntity del(String id){
        List<Object> list = redisCache.lGet(Constant.NGINX_LIST, 0, -1);
        for (int i =0;i<list.size();i++) {
            NginxEntity nginxEntity = (NginxEntity) list.get(i);
            if (id.equals(nginxEntity.getId())){
                redisCache.lRemove(Constant.NGINX_LIST,1,nginxEntity);
                return nginxEntity;
            }
        }
        return null;
    }
}
